<?php


namespace app\common;

use app\exception\HttpResponseException;
use think\db\exception\DbException;
use think\Model;

trait PaginationTrait
{
    /**
     * 分页查询并返回API格式数据的方法
     *
     * @param Model $model 数据模型对象
     * @param array $where 查询条件数组
     * @param string $order 排序方式
     * @param int $numPage 每页显示条数，默认为1000
     * @param int $currentPage 分页码 当前选中第几页
     * @return array
     */
    protected function paginateForApi(
        Model $model,
        array $where = [],
        string $order = 'id desc',
        int $numPage = 1000,
        int $currentPage = 1
    ): array {
        // 执行分页查询
        try {
            $data = $model->where($where)
                ->order($order)
                ->paginate([
                    'page' => $currentPage,
                    'list_rows' => $numPage,
                ]);
            // 转换为适合API输出的数据结构
            return [
                'total' => $data->total(),
                'num_page' => $numPage,
                'current_page' => $data->currentPage(),
                'last_page' => $data->lastPage(),
                'data' => $data->items(),
            ];
        } catch (DbException $e) {
            throw_strack_exception("errors", 500);
        }
    }
}
